package foro;

import java.util.ArrayList;
import java.util.List;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;

import es.cea.core.scopes.Sesion;

import registro.Usuario;

public class TestForo {
	
	protected final Log logger = LogFactory.getLog(getClass());
	
	ServicioForo sf;
	List<Foro> listaForos1;
	Usuario usuario1;
	Foro retorno;
	
	@BeforeMethod
	public void inicializa(){
		
		sf = new ServicioForo();
		
//		Escenario de las pruebas
		Mensaje ms1 = new Mensaje("un mensaje1");
		Mensaje ms2 = new Mensaje("un mensaje2");
		Mensaje ms3 = new Mensaje("un mensaje3");
		Mensaje ms4 = new Mensaje("un mensaje4");
		
		List<Mensaje> mensajes1 = new ArrayList<Mensaje>();
		List<Mensaje> mensajes2 = new ArrayList<Mensaje>();
		
		mensajes1.add(ms1);
		
		mensajes2.add(ms2);
		mensajes2.add(ms3);
		mensajes2.add(ms4);
		
		Foro foro1 = new Foro();
		Foro foro2 = new Foro();
		Foro foro3 = new Foro();
		
		foro1.nombre = "FORO 1";
		foro2.nombre = "FORO 2";
		foro1.mensajes = mensajes1;
		foro2.mensajes = mensajes2;
		
		foro3.nombre = "FORO 3";
	
		listaForos1 = new ArrayList<Foro>();
		listaForos1.add(foro1);
		
		sf.ses = new Sesion ();
		
		retorno = new Foro();
		
	}
	
	
	@Test
	public void pruebaForoUsuarioNoExiste(){
		
//		sf.ses.addAtributo("usuario", usuario1);

//		El usuario existe y tiene el foro, no debe dar errores.
		
		
		try {
			retorno = sf.dameForo("FORO 1");
			System.out.println(retorno);
		} catch (UsuarioSinPermisosException ex){
			logger.error("El usuario no tiene permisos para participar en el foro");
			assert!(false);
		} catch (UsuarioNoRegistradoException ex){
			logger.error("El usuario no esta registrado");
			assert!(false);
		}
		
	}

//	El usuario existe y tiene el foro, no debe dar errores.
	@Test
	public void pruebaForoUsuarioIdeal(){
		
		usuario1 = new Usuario("user","pass", "Una direccion",listaForos1);
		usuario1.foros.addAll(listaForos1);
		sf.ses.addAtributo("usuario", usuario1);
	
		try {
			retorno = sf.dameForo("FORO 1");
			System.out.println(retorno);
		} catch (UsuarioSinPermisosException ex){
			logger.error("El usuario no tiene permisos para participar en el foro");
			assert(false);
		} catch (UsuarioNoRegistradoException ex){
			logger.error("El usuario no esta registrado");
			assert(false);
		}
		
	}
	
//	El usuario existe pero no tiene permisos en el foro.
	@Test
	public void pruebaForoUsuarioSinPermisos() throws UsuarioNoRegistradoException{
		
		usuario1 = new Usuario("user","pass", "Una direccion",listaForos1);
		usuario1.foros.addAll(listaForos1);
		sf.ses.addAtributo("usuario", usuario1);
	
			try {
				retorno = sf.dameForo("FORO 2");
				assert(false):" deberia lanzar a excepcion!!";
			} catch (UsuarioSinPermisosException e) {
				assert(true);
				// TODO Auto-generated catch block
				logger.error("El usuario no tiene permisos para participar en el foro");
			}
	
		
	}
	
	
}
